[교육] PaaS-TA 교육2일차


boshVM를 배포하고, 그 위에 PaaS-TA 배포 및 CF-CLI(Cloud-Foundry)를 통해 제어해 봅시다.

PaaS-TA란?

  • 클라우드 인프라 환경을 제어하면서 애플리케이션을 쉽게 개발하고 안정적으로 운영할 수 있도록 관리 · 지원하는 클라우드 플랫폼

17  PASS-TA

단계별 개발 진행(2017 ~ 2019)

  • PaaS-TA 개발 과정

17-1  PASS-TA

17-2  PASS-TA

17-3  PASS-TA

17-4  PASS-TA

파스타 5.5 version - SEMINI

  • PaaS-TA의 최신 버전(v5.5) 이며, 오픈소스 기반의 클라우드파운드리와 쿠버네티스 기반의 컨테이터플랫폼을 제공하여 앱의 개발 및 배포, 실행, 운영관리 서비스 제공
  • 세미니의 특징

17-5  PASS-TA

  • 플랫폼별 병행 운영 가능(이전 버전에서는 불가능)

17-6  PASS-TA

핵심 기능

17-7  PASS-TA

17-8  PASS-TA

파스타 플랫폼 사용 가이드

17-9  PASS-TA

파스타의 장점

18  good

18-1  good

18-2  good

핵심 정리

19  summary

PaaS-TA 배포를 위한 기본 구성

IaaS 종류

19-1  Iaas

19-2  Iaas

19-3  Iaas

19-4  Iaas

19-5  Iaas

BOSH 개념

  • IaaS를 제어하는 프로그램으로 VM를 설치하거나 관리하는 도구

20  bosh

20-1  bosh

  • Bosh를 통해서 설치할 수 있는 프로그램을 릴리즈라고 합니다.

20-2  bosh

BOSH 컴포넌트 구성

20-3  bosh

20-4  bosh

Bosh 구성요소

  • 대표적으로 총 3가지가 있음(Release, Stemcell, Manifest)

1  bosh 구성요소

릴리즈 구성요소

2  릴리즈 구성요소

Stemcell의 구성요소

  • Stemcell은 VM에 올라가는 Agent를 의미함
  • OS이미지와 Agent를 설치해서 하나의 파일을 만든 것이 Stemcell 이라고 불려짐

3  스템쉘 구성요소

Manifest

  • BOSH Deployment manifest는 components 요소 및 배포의 속성을 정의한 YAML 파일

    • Deployment manifest 에는 sotfware를 설치 하기 위해서 어떤 Stemcell(OS, BOSH agent) 을 사용할 것이며,
    • Release(Software packages, Config templates, Scripts) 이름과 버전, VMs 용량, Jobs params 등을 정의하여 Bosh deploy CLI 을 이용하여 software(여기서는 서비스팩)를 설치 함

Bosh1 vs Bosh2

  • 기존 버전인 Bosh1은 Bosh-CLI를 통해 Bosh-VM를 생성하고, PaaS-TA의 컨트롤러와 컨테이너를 따로 생성해주어야 했지만,
  • Bosh2는 Bosh-CLI를 통해 Bosh-VM를 생성하고, PaaS-TA의 컨트롤러와 컨테이너를 한번에 설치할 수 있음

PaaS-TA를 설치하기 위한 Bosh 환경 구성 설명

Director(BoshVM)

  • PaaS-TA를 설치하기 위해 필요한 패키지 및 라이브러리, Manifest 파일 등의 환경을 가지고 있는 배포 작업 및 실행 서버
  • Inception 서버는 BOSH 설치와 BOSH의 Director를 설정
  • 환경 구성에 있어서 전제조건으로 Inception 서버는 외부와 통신이 가능해야 함

Paas-TA를 설치하기 위한 Bosh 파일 구성

5  보쉬 가상머신 설치

deployment 이하 디렉토리

5-1  보쉬 가상머신 설치

release, stemcell 파일 구성

5-2  보쉬 가상머신 설치

미리 알아두기

  • Bosh-VM 생성 시, IaaS 설정은 Bosh-Command를 이용해야 하며, 각각의 IaaS 마다 옵션 값이 변경될 수 있음

5-3  보쉬 가상머신 설치

Bosh 아키텍처(일반적, 테스트(로컬) 환경)

  • 실습 때, bosh-lite를 이용할 예정

    • Bosh에서 자체적으로 제공해주고 있음
  • 일반적인 Bosh 아키텍처 이용 시, 각각의 Bosh 컴포넌트를 VM으로 만들어 운영함(uaa, diego, blob store, credhub)

    • 물론 BoshVM 또한 VM이며, IaaS 환경에서 PaaS-TA의 VM를 관리하기 위한 도구이자 VM임
  • Bosh-lite(테스트 환경)을 이용 시, BoshVM 안에 각각의 Bosh 컴포넌트를 컨테이너화 시켜서 운영함

4  보쉬 전체 아키텍처

LAB 1 - BOSH 설치

VMware를 통한 Inception(VM)의 설치 과정은 생략
Paas-TA 5.5 설치 링크

  • 파스타 설치에 필요한 파일 다운로드 및 압축 해제 스크립트
$ sudo apt install curl
$ mkdir workspace
# (workspace 아래에 PaaS-TA 설치 파일 다운로드 후 압축 해제)
$ cd workspace
$ curl -Lo paasta-5.5.zip https://nextcloud.paasta.org/index.php/s/ARmoNN83XGgt2gg/download
$ unzip paasta-5.5.zip
  • Bosh 설치
$ curl -Lo ./bosh https://s3.amazonaws.com/bosh-cli-artifacts/bosh-cli-6.1.0-linux-amd64
$ chmod +x ./bosh
$ sudo mv ./bosh /usr/local/bin/bosh
$ bosh -v
  • 종속성 파일 설치
$ sudo apt-get install -y build-essential zlibc zlib1g-dev ruby ruby-dev openssl libxslt1-dev libxml2-dev libssl-dev libreadline7 libreadline-dev libyaml-dev libsqlite3-dev sqlite3
  • Bosh-VM(Bosh-lite)를 생성하기 위한 VirtualBox 설치
$ sudo apt update
$ sudo apt upgrade
$ wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
$ wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -
$ sudo add-apt-repository "deb http://download.virtualbox.org/virtualbox/debian bionic contrib"
$ sudo apt update
$ sudo apt install virtualbox-6.0
$ VBoxManage --version
# 6.0.14r133895
  • bosh-deployment 폴더 확인

7  bosh-deployment 폴더

  • 실습에 사용할 Bosh-lite 쉘 스크립트의 정보

    • 위에서도 언급했지만, 각각의 IaaS 마다 설정해줘야 하는 설정 값은 다름(동일한 부분도 존재)
$ cat deploy-bosh-lite.sh

#!/bin/bash

bosh create-env bosh.yml \
	--state=warden/state.json \
	--vars-store warden/creds.yml \		# bosh 인증정보를 가지고 있으며, 해당 파일을 이용해 bosh에 로그인
	-o virtualbox/cpi.yml \
	-o virtualbox/outbound-network.yml \
	-o bosh-lite.yml \
	-o bosh-lite-runc.yml \
	-o uaa.yml \
	-o credhub.yml \					# Credhub은 인증정보 저장소, Bosh 설치 시 credhub.yml을 적용하면 PaaS-TA 설치 시 인증정보를 credhub에 저장하게 됨
	-o jumpbox-user.yml \				# bosh VM에 접근하기 위한 인증을 적용하는 파일
	-v inception_os_user_name='ubuntu' \
	-v director_name='micro-bosh' \
	-v internal_cidr='10.0.1.0/24' \
	-v internal_gw='10.0.1.1' \
	-v internal_ip='10.0.1.6' \
	-v network_name='vboxnet0' \
	-v outbound_network_name='NatNetwork'
  • [참고] IaaS 마다 설정해줘야 하는 쉘 스크립트 차이 확인(AWS와 Bosh-lite 비교)

6  boshvm 배포

6-1  boshvm 배포

  • BOSH-VM 배포

    • ~/workspace/paasta-5.5/deployment/bosh-deployment 이하 디렉토리에는 IaaS별 bosh를 설치 하는 shell이 존재
    • {iaas}은 해당하는 IaaS의 이름(bosh-lite, Openstack, AWS, GCP etc..)
$ cd ~/workspace/paasta-5.5/deployment/bosh-deployment
$ chmod 755 *.sh
$ ./deploy-{iaas}.sh

8  bosh deploy

  • Bosh Alias 설정
$ bosh alias-env micro-bosh -e 10.0.1.6 --ca-cert <(bosh int warden/creds.yml --path /director_ssl/ca)
💡

BoshVM login 방법은 총 2가지가 있음

  1. login 쉘을 통해 boshVM에 로그인 후 명령어를 이용하는 방법
  2. boshVM 안에 접속하기 위한 jumpbox.key를 생성해 SSH로 로그인하는 방법
  • Bosh login 쉘 스크립트 생성
$ vi login.sh

#!/usr/bin

export BOSH_CA_CERT=$(bosh int ./warden/creds.yml --path /director_ssl/ca)
export BOSH_CLIENT=admin
export BOSH_CLIENT_SECRET=$(bosh int ./warden/creds.yml --path /admin_password)
  • Bosh login 쉘 적용 및 확인(login.sh 을 이용해 bosh에 로그인)
$ source login.sh
$ bosh -e micro-bosh env
  • jumpbox key 생성 (Bosh VM 로그인 용)

    • SSH로 BoshVM에 로그인하기 위한 jumpbox key 생성
$ bosh int warden/creds.yml --path /jumpbox_ssh/private_key > jumpbox.key
$ chmod 600 jumpbox.key
  • BoshVM으로 배포된 프로그램 process 확인 (bosh vm or paas-ta vm ssh 접속 후 이용)
$ ssh jumpbox@10.0.1.6 -i jumpbox.key # boshVM 로그인
bosh/0:~$ sudo su
$ monit summary

9  프로세서 확인

  • boshVM에 배포된 process 정지 및 시작 명령어
# 정지 명령어
$ monit stop credhub
# 시작 명령어
$ monit start credhub
# boshVM에서 나가기
$ exit # root 계정 logout
$ exit # jumpbox 계정 logout
  • credhub cli 설치

    • server쪽에 not found가 뜨는 이유는 로그인을 하지 않았기 떄문에 나타나는 현상임
$ cd ~
$ wget https://github.com/cloudfoundry-incubator/credhub-cli/releases/download/2.0.0/credhub-linux-2.0.0.tgz
$ tar -xvf credhub-linux-2.0.0.tgz
$ chmod +x credhub
$ sudo mv credhub /usr/local/bin/credhub
$ credhub --version

10  credhub

  • credhub shell 생성
$ cd ~/workspace/paasta-5.5/deployment/bosh-deployment
$ vi credhub_login.sh
...
#!/usr/bin

export CREDHUB_CLIENT=credhub-admin
export CREDHUB_SECRET=$(bosh int --path /credhub_admin_client_secret warden/creds.yml)
export CREDHUB_CA_CERT=$(bosh int --path /credhub_tls/ca warden/creds.yml)
...
  • credhub shell 쉘 적용
$ cd ~/workspace/paasta-5.5/deployment/bosh-deployment
$ source credhub_login.sh
  • credhub 로그인
$ credhub login -s https://10.0.1.6:8844 --skip-tls-validation

10-1  credhub

  • credhub credentials 확인

    • credentials 인증 정보가 하나도 조회되지 않는데, 이는 boshVM만 생성하고 아무런 작업을 하지 않아 나타나는 현상
    • boshVM에 process VM를 배포하게 되면, credhub에 인증정보가 저장됩니다.
$ credhub find
  • VirtualBox 환경저장 및 종료(boshVM)
# /home/ubuntu/workspace/paasta-5.5/deployment/bosh-deployment 해당 디렉토리에서 정지 작업을 해야함
$ cd /home/ubuntu/workspace/paasta-5.5/deployment/bosh-deployment
$ vboxmanage controlvm $(bosh int warden/state.json --path /current_vm_cid) savestate
  • 이후 Inception 서버 종료

    • Inception 서버 재기동 시, VirtualBox를 받드시 재기동 해야함
# Virtual Box vm 복구
$ cd /home/ubuntu/workspace/paasta-5.5/deployment/bosh-deployment
$ vboxmanage startvm $(bosh int warden/state.json --path /current_vm_cid) --type headless

BOSH를 통한 PaaS-TA 구축 방법

Cloud-config

미리 알아두기

1  파스타구축cloud-config

yaml 파일에 정리된 스크립트 용어정리

  • azs는 가용 zone에 대한 설정으로 paasta가 설치될 zone에 대한 정의
  • vm_type은 paasta vm이 설치될 spec을 정의하며, instance_type은 openstack flavor에 설정 되어 있어야 함
  • compilation은 PaaS-TA 설치 시 Compile VM이 생성될 zone 및 vm type을 설정
  • disk_types는 PaaS-TA 설치 시 사용될 VM의 디스크에 대한 정의
  • network은 paasta vm이 생성될 network관련 정의
  • vm_extentions는 관련 보안 그룹 및 로드 밸런서와 같은 임의의 IaaS 특정 구성을 지정할 수 있는 클라우드 구성의 가상 컴퓨터 구성
  • 설정된 cloud-config.yml 파일을 배포하는 명렁어

    • 아래 코드는 bosh-lite IaaS을 기준으로 함

1-1  파스타구축cloud-config

# Cloud-config설정 정보를 BOSH에 update
$ cd ~/workspace/paasta-5.5/deployment/cloud-config
$ bosh –e {director_name} update-cloud-config {iaas}_cloud_config.yml
# bosh에 upload된 cloud-config 확인
$ bosh –e {director_name} cloud-config
  • bosh에 upload된 cloud-config 확인
$ bosh –e {director_name} cloud-config

runtime-config설정 정보를 BOSH에 update 예제

$ cd ~/workspace/paasta-5.5/deployment/bosh-deployment
$ chmod 755 ./update-runtime-config.sh
$ cat ./update-runtime-config.sh

[update-runtime-config.sh]
...
bosh -e ${director_name} update-runtime-config -n runtime-configs/dns.yml \
-v inception_os_user_name=${inception_os_user_name} \
-v cert_days=3650
...

$ ./update-runtime-config.sh
  • bosh에 upload된 runtime-config 확인
$ bosh –e {director_name} runtime-config

Stemcell 파일을 BOSH에 update 예제

$ cd ~/workspace/paasta-5.5/stemcell/paasta
$ bosh –e {director_name} upload-stemcell bosh-stemcell-315.64-{iaas}-
ubuntu-xenial-go-agent.tgz
  • bosh에 upload된 Stemcell 확인
$ bosh –e {director_name} stemcells

manifest 파일 분석 및 배포 예시

  • paasta-deployment.yml 파일은 paasta를 deploy하는 manifest file
  • paasta vm에 대한 설치를 정의
  • vm중 singleton-blobstore, database의 azs(zone)을 변경 하면 Org & Space 및 app의 정보가 모두 삭제됨
  • 아래 option들은 존재 하지 않으면 bosh가 자동 생성해줌

1  manifest 파일 분석 및 배포예시

2  매니페스트파일

  • PaaS-TA Deploy 실행
$ ./deploy-bosh-lite.sh
  • PaaS-TA Deploy VM 확인
$ bosh -e {director_name} –d {deploy_name} vms

LAB 2 - BoshVM에 PaaS-TA 구축 실습

BoshVM에 파스타를 설치할 정보를 Cloud-config, runtime-config, stemcell 를 확인 및 구축하기

  • Virtual Box vm 복구(이전에 VM 종료 시 꼭 다시 실행!)
$ cd /home/ubuntu/workspace/paasta-5.5/deployment/bosh-deployment
$ vboxmanage startvm $(bosh int warden/state.json --path /current_vm_cid) --type headless
  • Bosh login
$ cd ~/workspace/paasta-5.5/deployment/bosh-deployment
$ source login.sh
  • Bosh login 확인
$ bosh -e micro-bosh env
  • cloud-config 적용
$ bosh -e micro-bosh update-cloud-config bosh-lite-cloud-config.yml
  • cloud-config 설정 확인
$ cd ~/workspace/paasta-5.5/deployment/bosh-deployment
$ bosh -e micro-bosh cloud-config
  • update-runtime-config.sh 스크립트 확인

    • -n runtime-configs/dns.yml : 런타임 정보가 들어있는 스크립트
    • -v cert_days=3650 : 인증 기간을 나타냄
#!/bin/bash
# 디렉토리 네임
director_name='micro-bosh'
# os_user_name
inception_os_user_name='ubuntu'

bosh -e ${director_name} update-runtime-config -n runtime-configs/dns.yml \
	-v inception_os_user_name=${inception_os_user_name} \
	-v cert_days=3650
  • runtime config 등록
$ ./update-runtime-config.sh
  • runtime config 확인
$ bosh -e micro-bosh runtime-config
  • bosh config 전체 확인

    • cloud : IaaS 설정 config(cloud-config.yml)
    • runtime : runtime 설정(runtime/dns.yml)
$ bosh -e micro-bosh configs

3  config 정보확인

  • stemcell 등록
$ cd ~/workspace/paasta-5.5/stemcell/paasta
$ bosh -e micro-bosh upload-stemcell bosh-stemcell-315.64-warden-boshlite-ubuntu-xenial-go_agent.tgz
  • stemcell 등록 확인
$ bosh -e micro-bosh stemcells

3-1  config 정보확인

  • 파스타 배포하기
cd ~/workspace/paasta-5.5/deployment/paasta-deployment
$ ./deploy-bosh-lite.sh
  • IP route 설정 (bosh-lite를 이용할때)
$ sudo ip route add   10.244.0.0/16 via 10.0.1.6

기타 실습

  • PaaS-TA VM에서 생성된 instances를 출력하는 명령어(배포되지 않은 것도 포함해서 나옴)

    • 배포를 누가 했는지 출력
$ bosh -e micro-bosh instances
  • BoshVM 정보의 상세정보 확인(로그인 정보, 인증 유효기간 확인)
$ bosh -e micro-bosh env --details
  • 현재 올라가 있는 스템셀 정보 확인
$ bosh -e micro-bosh stemcells
  • VM에 어떤 releases 정보가 들어가 있는지 알아보는 명령어
$ bosh -e micro-bosh releases
  • 현재 실행중인 TASK들을 확인
$ bosh -e micro-bosh tasks --recent
  • 작업중 오류가 발생해 lock이 걸린 TASK를 보여줌
$ bosh -e micro-bosh locks
  • TASK-ID이용해서 TASK를 종료
$ bosh -e micro-bosh cancel-task 123
  • 배포된 VM 정보 && 디스크, CPU, 메모리에 대한 정보를 종합 확인

    • --vitals 옵션 : 디테일하게 확인
$ bosh -e micro-bosh -d paasta vms --vitals
  • PaaS-TA에 배포된 VM들을 확인(instances 명령어와는 다르게 VM에 배포된 instances 들만 출력)

    • VM에 대한 정보 포함해서 알려줌
$ bosh -e micro-bosh -d paasta vms
  • API VM에 접속

    • API VM이 여러 개일 시 뒤에 고유번호도 적어줘야함
    • BoshVM 안에 접속하려면 jumpbox.key를 이용해야했던 거와 같이 paasta 안에 접속하려면 api로 접근
$ bosh -e micro-bosh -d paasta ssh api
  • 만약 접속한 VM에서 에러가 발생할 시 로그 확인 경로

    • vm에 로그인하게되면 var/vcap 경로에서 여러 정보를 열람할 수 있음.
    • 내부 오류 발생시 이곳에서 sys/log 에 들어가 로그를 확인하거나, 파일 링크 상태(jobs), 에이전트에 대한 정보, 파일들을 볼 수 있음.
$ cd var/vcap/sys/log

PaaS-TA를 사용하기 위한 cf-cli 설치 및 명령어 사용

  • 설치를 위한 레포지토리 키 등록 및 레포지토리 등록
$ wget -q -O - https://packages.cloudfoundry.org/debian/cli.cloudfoundry.org.key | sudo apt-key add -
$ echo "deb https://packages.cloudfoundry.org/debian stable main" | sudo tee /etc/apt/sources.list.d/cloudfoundry-cli.list
  • 레포지토리 업데이트 && Cloud Foundary 에서 제공하는 cf-cli 설치 && 버전 확인
$ sudo apt update
$ sudo apt install cf-cli
$ cf -v
  • cf login

    • --skip-ssl-validation 옵션 : PaaS-TA에 로그인 시, SSL 인증 절차를 거치지 않았기 때문에 해당 사이트를 신뢰하고 검증하지 않아도 된다는 명령어
    • 이후에 API-Endpoint 을 입력하는 창이 나오게 되는데, 이는 VM 안에 설치된 PaaS-TA에게 어디에 접속해야 하는지 알려줘야 하므로, 설정하는 옵션임
    • 해당 URL은 paasta를 배포할 때, 스크립트에서 설정한 -v system_domain=10.244.0.34.nip.io 옵션에 해당되며, 해당 URL를 api로 사용하기 때문에 api 도메인을 입력 후 서브 도메인을(10.244.0.34.nip.io) 입력해주는 것임
    • 다른 도메인을 사용한다고 하더라도, api 도메인 입력 후 서브 도메인을 입력할 것
$ cf login --skip-ssl-validation
(명령 수행 후 API Endpoit :  이 뜨면 아래 https://api.10.244.0.34.nip.io 를 입력한다)

$ https://api.10.244.0.34.nip.io # SSL 인증서를 인증하지 않았기 때문에 해당 PaaS-TA ip를 허용한다고 알려줘야함

# passta deployment에서 로그인 정보 변경 가능
$ admin/admin # 관리자로 로그인 - 이메일/패스워드 입력
  • 로그인 후 화면 모습

    • Org는 자동적으로 설정됨(admin 계정이 하나이므로)
    • Space는 설정되지 않은 모습

1  클라우드파운데이션 로그인

자세한 cf 명령어에 대한 정보는 cf --help or cf --help -a 명령어로 확인 가능

  • user 생성
# $ cf create-user --help 처럼 --help 명령어 사용가능
$ cf create-user edu-user user
  • org 생성
$ cf create-org edu-org
$ cf orgs
  • space 생성

    • -o 옵션 : organization 을 뜻하며, -o 옵션을 붙이지 않을 시, 기본적으로 현재 설정된 org에 space 공간을 만듬
    • 현재 설정된 정보를 확인하는 명령어는 cf target 명령어임
$ cf create-space -o edu-org edu-space
$ cf spaces
  • org role 설정

    • 자세한 정보는 cf set-org-role --help 명령어로 확인 가능
$ cf set-org-role edu-user edu-org OrgManager
  • space role 설정

    • 자세한 정보는 cf set-space-role --help 명령어로 확인 가능
$ cf set-space-role edu-user edu-org edu-space SpaceDeveloper
  • 생성한 org, space의 타켓을 설정함
$ cf target -o edu-org -s edu-space  (아니면 cf target -o edu-org)

LAB 3 - CF에서 제공해주는 spring-music 애플리케이션 배포해보기

  • 자바 8버전 설치
$ sudo apt update
$ sudo apt install openjdk-8-jdk
$ java -version
  • git 설치
$ sudo apt install git
$ git --version
  • spring-music 다운로드 및 빌드

    • gredle 로 해당 파일을 빌드
$ cd ~/workspace
$ git clone https://github.com/cloudfoundry-samples/spring-music
$ cd spring-music/
$ ./gradlew clean assemble
  • manifest 파일 확인
$ cat manifest.yml

---
applications:
- name: spring-music
  memory: 1G
  random-route: true # URL을 자동적으로 만들어줌
  path: build/libs/spring-music-1.0.jar
  env:
    JBP_CONFIG_SPRING_AUTO_RECONFIGURATION: '{enabled: false}'
    SPRING_PROFILES_ACTIVE: http2
#    JBP_CONFIG_OPEN_JDK_JRE: '{ jre: { version: 11.+ } }'
  • cf push 명령어로 애플리케이션 배포 및 애플리케이션 확인(아래는 push의 과정을 설명)

    1. droplet 이미지를 만듬
    2. blobstore에 이미지를 저장
    3. blobstore에 저장한 이미지인 droplet 이미지 파일을 꺼내서 diegoCell 에 graden를 만듬
    4. 이후 garden 위에 컨테이너 형태로 애플리케이션을 배포
    5. cf apps로 배포된 애플리케이션 확인 가능
    6. 이때 위에서 본 manifest.yml 파일에서 설정한 random-route: true 로 인해 URL이 자동적으로 생성되고, apps 명령어를 통해 확인이 가능
$ cf push
$ cf apps
  • 로그 확인
$ cf app spring-music
$ cf logs spring-music
$ cf logs spring-music --recent
  • cf를 이용한 ssh 터널링
$ cf ssh welcome-cf -L 9999:10.10.4.14:3306

Hello, I'm@nickhealthy
개발자를 꿈꾸고, 파이썬과 클라우드에 관심이 많은 비전공자

Github